<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>QeePHP 快速入门</title>
<link href="css/base.css" rel="stylesheet" type="text/css">
</head>
<body>

<div id="page">


<div class="guide-section">

  <div class="guide-header">
    <span class="nav">
      <a href="http://qeephp.com/docs/">文档索引</a>
      &raquo;
      <a href="index.html">QeePHP 快速入门</a>
      &raquo;
      <a href="node-tasks.html">实现任务管理</a>
      &raquo;
      添加任务    </span>
  </div>

  <div class="guide-section-details formatted">

    
<h1>添加任务</h1>

<p>添加任务的功能实现和前面实现用户功能的流程完全一致：</p>

<ol>
	<li>根据需求完善模型</li>

	<li>创建需要的表单</li>

	<li>编写控制器代码</li>
</ol>

<h2>完善 task 模型</h2>

<p>打开 app/model/task.php（如果没有则用 WebSetup
创建），修改下面几个地方：</p>

<p>属性和关联的定义：</p>

<pre class="php code"><span class="st_h">'props'</span> <span
class="sy0">=&gt;</span> <span class="kw3">array</span>
<span
class="br0">&#40;</span>
    <span class="sy0">.....</span>
&nbsp;
    <span
class="st_h">'is_completed'</span> <span class="sy0">=&gt;</span> <span
class="kw3">array</span><span class="br0">&#40;</span><span
class="st_h">'readonly'</span> <span class="sy0">=&gt;</span> <span
class="kw2">true</span><span class="br0">&#41;</span><span
class="sy0">,</span>
    <span class="st_h">'completed_at'</span> <span
class="sy0">=&gt;</span> <span class="kw3">array</span><span
class="br0">&#40;</span><span class="st_h">'readonly'</span> <span
class="sy0">=&gt;</span> <span class="kw2">true</span><span
class="br0">&#41;</span><span class="sy0">,</span>
    <span
class="st_h">'owner'</span> <span class="sy0">=&gt;</span> <span
class="kw3">array</span><span class="br0">&#40;</span>QDB<span
class="sy0">::</span><span class="me2">BELONGS_TO</span> <span
class="sy0">=&gt;</span> <span class="st_h">'User'</span><span
class="sy0">,</span> <span class="st_h">'source_key'</span> <span
class="sy0">=&gt;</span> <span class="st_h">'owner_id'</span><span
class="br0">&#41;</span><span class="sy0">,</span>
<span
class="br0">&#41;</span><span class="sy0">,</span></pre>

<p>验证规则：</p>

<pre class="php code"><span class="st_h">'validations'</span> <span
class="sy0">=&gt;</span> <span class="kw3">array</span>
<span
class="br0">&#40;</span>
    <span class="st_h">'subject'</span> <span
class="sy0">=&gt;</span> <span class="kw3">array</span>
    <span
class="br0">&#40;</span>
        <span class="kw3">array</span><span
class="br0">&#40;</span><span class="st_h">'not_empty'</span><span
class="sy0">,</span> <span class="st_h">'任务主题不能为空'</span><span
class="br0">&#41;</span><span class="sy0">,</span>
        <span
class="kw3">array</span><span class="br0">&#40;</span><span
class="st_h">'max_length'</span><span class="sy0">,</span> <span
class="nu0">180</span><span class="sy0">,</span> <span
class="st_h">'任务主题不能超过 60 个汉字或 180 个字符'</span><span
class="br0">&#41;</span><span class="sy0">,</span>
    <span
class="br0">&#41;</span><span class="sy0">,</span>
<span
class="br0">&#41;</span><span class="sy0">,</span></pre>

<p>自动填充规则：</p>

<pre class="php code"><span class="st_h">'create_autofill'</span> <span
class="sy0">=&gt;</span> <span class="kw3">array</span>
<span
class="br0">&#40;</span>
    <span class="sy0">.....</span>
&nbsp;
    <span
class="co1">// 新建任务的 is_completed 状态总是为 false</span>
    <span
class="st_h">'is_completed'</span> <span class="sy0">=&gt;</span> <span
class="kw2">false</span><span class="sy0">,</span>
    <span
class="co1">// 新建任务的 completed_at 值总是为 null</span>
    <span
class="st_h">'completed_at'</span> <span class="sy0">=&gt;</span> <span
class="kw2">null</span><span class="sy0">,</span>
<span
class="br0">&#41;</span><span class="sy0">,</span></pre>

<p>create_autofill
设置可以在创建对象时将指定的数值设置为特定值。例如“新建任务的状态是未完成”这个逻辑就可以通过简单的指定
create_autofill 来实现。</p>

<p>最后再加上安全性设置：</p>

<pre class="php code"><span class="st_h">'attr_accessible'</span> <span
class="sy0">=&gt;</span> <span class="st_h">'subject, description'</span><span
class="sy0">,</span></pre>

<p>attr_accessible 设置会在构造对象时产生作用：</p>

<pre class="php code"><span class="re0">$task</span> <span
class="sy0">=</span> <span class="kw2">new</span> Task<span
class="br0">&#40;</span><span class="re0">$form</span><span
class="sy0">-&gt;</span><span class="me1">values</span><span
class="br0">&#40;</span><span class="br0">&#41;</span><span
class="br0">&#41;</span><span class="sy0">;</span>
<span
class="re0">$task</span><span class="sy0">-&gt;</span><span
class="me1">save</span><span class="br0">&#40;</span><span
class="br0">&#41;</span><span class="sy0">;</span></pre>

<p>上述代码构造了一个新的 task
模型实例，并且以表单的值作为对象初始值。这种方式很方便，但存在一个安全隐患。</p>

<p>假设用户在客户端构造一个包含“task_id”字段值的表单，并提交到服务器，那么此时构造出来的
$task 对象就包含了 task_id 属性值。由于 task_id 属性也是 task
对象存储在 tasks 表中的主键字段，那么在接下来调用 save()
方法时，实际完成的操作不是“新建一个 task
对象”，而是“更新一个已有的 task
对象”。因此我们务必要堵上这样的漏洞。</p>

<p>设置 attr_accessible
选项，可以指定哪些属性可以通过构造函数来赋值，这样上面的代码中即便表单包含
task_id 值，也不会被存入新建的对象，实现了安全性。</p>

<h2>创建表单</h2>

<p>添加 app/form/task.php 和 app/form/task_form.yaml
文件，内容分别是：</p>

<pre class="php code"><span class="kw2">class</span> Form_Task <span
class="kw2">extends</span> QForm
<span class="br0">&#123;</span>
    <span
class="kw2">function</span> __construct<span class="br0">&#40;</span><span
class="re0">$action</span><span class="br0">&#41;</span>
    <span
class="br0">&#123;</span>
        <span
class="co1">// 调用父类的构造函数</span>
        parent<span
class="sy0">::</span>__construct<span class="br0">&#40;</span><span
class="st_h">'form_task'</span><span class="sy0">,</span> <span
class="re0">$action</span><span class="br0">&#41;</span><span
class="sy0">;</span>
&nbsp;
        <span
class="co1">// 从配置文件载入表单</span>
        <span
class="re0">$filename</span> <span class="sy0">=</span> <span
class="kw3">rtrim</span><span class="br0">&#40;</span><span
class="kw3">dirname</span><span class="br0">&#40;</span><span
class="kw2">__FILE__</span><span class="br0">&#41;</span><span
class="sy0">,</span> <span class="st_h">'/\\'</span><span
class="br0">&#41;</span> <span class="sy0">.</span> DS <span
class="sy0">.</span> <span class="st_h">'task_form.yaml'</span><span
class="sy0">;</span>
        <span class="re0">$this</span><span
class="sy0">-&gt;</span><span class="me1">loadFromConfig</span><span
class="br0">&#40;</span>Helper_YAML<span class="sy0">::</span><span
class="me2">loadCached</span><span class="br0">&#40;</span><span
class="re0">$filename</span><span class="br0">&#41;</span><span
class="br0">&#41;</span><span class="sy0">;</span>
        <span
class="re0">$this</span><span class="sy0">-&gt;</span><span
class="me1">addValidations</span><span class="br0">&#40;</span>Task<span
class="sy0">::</span><span class="me2">meta</span><span
class="br0">&#40;</span><span class="br0">&#41;</span><span
class="br0">&#41;</span><span class="sy0">;</span>
    <span
class="br0">&#125;</span>
<span class="br0">&#125;</span></pre>

<pre class="python code">~form:
  _subject: <span
class="st0">&quot;添加任务&quot;</span>
&nbsp;
subject:
  _ui: textbox
  _label: <span
class="st0">&quot;任务主题&quot;</span>
&nbsp;
description:
  _ui: memo
  _label: <span
class="st0">&quot;任务描述&quot;</span></pre>

<h2>添加控制器动作</h2>

<p>修改 tasks 控制器（如果没有则通过 WebSetup 创建），添加
actionCreate() 动作方法：</p>

<pre class="php code"><span class="kw2">function</span> actionCreate<span
class="br0">&#40;</span><span class="br0">&#41;</span>
<span
class="br0">&#123;</span>
    <span class="re0">$form</span> <span
class="sy0">=</span> <span class="kw2">new</span> Form_Task<span
class="br0">&#40;</span>url<span class="br0">&#40;</span><span
class="st_h">'tasks/create'</span><span class="br0">&#41;</span><span
class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span
class="kw1">if</span> <span class="br0">&#40;</span><span
class="re0">$this</span><span class="sy0">-&gt;</span>_context<span
class="sy0">-&gt;</span><span class="me1">isPOST</span><span
class="br0">&#40;</span><span class="br0">&#41;</span> <span
class="sy0">&amp;&amp;</span> <span class="re0">$form</span><span
class="sy0">-&gt;</span><span class="me1">validate</span><span
class="br0">&#40;</span><span class="re0">$_POST</span><span
class="br0">&#41;</span><span class="br0">&#41;</span>
    <span
class="br0">&#123;</span>
        <span
class="co1">// 通过应用程序对象获得当前用户对象</span>
        <span
class="re0">$user</span> <span class="sy0">=</span> <span
class="re0">$this</span><span class="sy0">-&gt;</span>_app<span
class="sy0">-&gt;</span><span class="me1">currentUserObject</span><span
class="br0">&#40;</span><span class="br0">&#41;</span><span
class="sy0">;</span>
&nbsp;
        <span
class="co1">// 通过用户对象创建任务</span>
        <span
class="re0">$task</span> <span class="sy0">=</span> <span
class="re0">$user</span><span class="sy0">-&gt;</span><span
class="me1">createTask</span><span class="br0">&#40;</span><span
class="re0">$form</span><span class="br0">&#91;</span><span
class="st_h">'subject'</span><span class="br0">&#93;</span><span
class="sy0">-&gt;</span><span class="me1">value</span><span
class="sy0">,</span> <span class="re0">$form</span><span
class="br0">&#91;</span><span class="st_h">'description'</span><span
class="br0">&#93;</span><span class="sy0">-&gt;</span><span
class="me1">value</span><span class="br0">&#41;</span><span
class="sy0">;</span>
&nbsp;
        <span
class="co1">// 保存并重定向浏览器</span>
        <span
class="re0">$task</span><span class="sy0">-&gt;</span><span
class="me1">save</span><span class="br0">&#40;</span><span
class="br0">&#41;</span><span class="sy0">;</span>
        <span
class="kw1">return</span> <span class="re0">$this</span><span
class="sy0">-&gt;</span>_redirect<span class="br0">&#40;</span>url<span
class="br0">&#40;</span><span class="st_h">'tasks/index'</span><span
class="br0">&#41;</span><span class="br0">&#41;</span><span
class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span
class="re0">$this</span><span class="sy0">-&gt;</span>_view<span
class="br0">&#91;</span><span class="st_h">'form'</span><span
class="br0">&#93;</span> <span class="sy0">=</span> <span
class="re0">$form</span><span class="sy0">;</span>
<span
class="br0">&#125;</span></pre>

<p>以及对应的视图 app/view/tasks/create.php：</p>

<pre class="php code"><span class="kw2">&lt;?php</span> <span
class="re0">$this</span><span class="sy0">-&gt;</span>_extends<span
class="br0">&#40;</span><span class="st_h">'_layouts/default_layout'</span><span
class="br0">&#41;</span><span class="sy0">;</span> <span
class="kw2">?&gt;</span>
&nbsp;
<span class="kw2">&lt;?php</span> <span
class="re0">$this</span><span class="sy0">-&gt;</span>_block<span
class="br0">&#40;</span><span class="st_h">'contents'</span><span
class="br0">&#41;</span><span class="sy0">;</span> <span
class="kw2">?&gt;</span>
&nbsp;
<span class="kw2">&lt;?php</span> <span
class="re0">$this</span><span class="sy0">-&gt;</span>_element<span
class="br0">&#40;</span><span class="st_h">'formview_simple'</span><span
class="sy0">,</span> <span class="kw3">array</span><span
class="br0">&#40;</span><span class="st_h">'form'</span> <span
class="sy0">=&gt;</span> <span class="re0">$form</span><span
class="br0">&#41;</span><span class="br0">&#41;</span><span
class="sy0">;</span> <span class="kw2">?&gt;</span>
&nbsp;
<span
class="kw2">&lt;?php</span> <span class="re0">$this</span><span
class="sy0">-&gt;</span>_endblock<span class="br0">&#40;</span><span
class="br0">&#41;</span><span class="sy0">;</span> <span
class="kw2">?&gt;</span></pre>

<p>这里我们用到了应用程序对象的一个新方法
currentUserObject()。但这个方法还需要添加到 app/myapp.php
中，代码如下：</p>

<pre class="php code"><span
class="co4">/**
 * 获得当前用户对应的 User 模型对象实例
 *
 * @return User
 */</span>
<span
class="kw2">function</span> currentUserObject<span class="br0">&#40;</span><span
class="br0">&#41;</span>
<span class="br0">&#123;</span>
    <span
class="re0">$data</span> <span class="sy0">=</span> <span
class="re0">$this</span><span class="sy0">-&gt;</span><span
class="me1">currentUser</span><span class="br0">&#40;</span><span
class="br0">&#41;</span><span class="sy0">;</span>
    <span
class="re0">$user</span> <span class="sy0">=</span> User<span
class="sy0">::</span><span class="me2">find</span><span
class="br0">&#40;</span><span class="st_h">'user_id = ?'</span><span
class="sy0">,</span> <span class="re0">$data</span><span
class="br0">&#91;</span><span class="st_h">'id'</span><span
class="br0">&#93;</span><span class="br0">&#41;</span><span
class="sy0">-&gt;</span><span class="me1">query</span><span
class="br0">&#40;</span><span class="br0">&#41;</span><span
class="sy0">;</span>
    <span class="kw1">if</span> <span
class="br0">&#40;</span><span class="re0">$user</span><span
class="sy0">-&gt;</span><span class="me1">id</span><span
class="br0">&#40;</span><span class="br0">&#41;</span><span
class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span
class="kw1">return</span> <span class="re0">$user</span><span
class="sy0">;</span>
    <span class="br0">&#125;</span>
    <span
class="kw1">else</span>
    <span class="br0">&#123;</span>
        throw <span
class="kw2">new</span> MyAppException<span class="br0">&#40;</span><span
class="st_h">'当前访问用户没有对应的 User 对象'</span><span
class="br0">&#41;</span><span class="sy0">;</span>
    <span
class="br0">&#125;</span>
<span class="br0">&#125;</span></pre>

<p>currentUserObject() 方法不但通过查询操作获得 User
模型对象实例，而且通过检查其 ID
来确保这个对象是肯定存在的。这种做法从根本上保证了后续数据的有效性。</p>

<blockquote>
	<p>保证逻辑的正确性和数据的有效性是应用程序的核心使命！</p>
</blockquote>

<h2>测试创建任务</h2>

<p>通过浏览器访问 <a
href="http://localhost/todo/public/index.php?controller=tasks&amp;action=create">http://localhost/todo/public/index.php?controller=tasks&action=create</a>
就可以看到添加任务表单：</p>

<div class="figure"><img src="images/tasks-add-01.png" alt="" />
	<p>添加任务表单</p>
</div>

<p>输入有效数据后提交，可以通过 phpMyAdmin
看到数据已经成功添加：</p>

<div class="figure"><img src="images/tasks-add-02.png" alt="" />
	<p>成功保存到数据库的任务数据</p>
</div>

<h2>添加任务查看页面</h2>

<p>修改 tasks 控制器的 actionIndex() 动作方法：</p>

<pre class="php code"><span class="kw2">function</span> actionIndex<span
class="br0">&#40;</span><span class="br0">&#41;</span>
<span
class="br0">&#123;</span>
    <span class="re0">$tasks</span> <span
class="sy0">=</span> Task<span class="sy0">::</span><span
class="me2">find</span><span class="br0">&#40;</span><span
class="st_h">'owner_id = ?'</span><span class="sy0">,</span> <span
class="re0">$this</span><span class="sy0">-&gt;</span>_app<span
class="sy0">-&gt;</span><span class="me1">currentUserObject</span><span
class="br0">&#40;</span><span class="br0">&#41;</span><span
class="sy0">-&gt;</span><span class="me1">id</span><span
class="br0">&#40;</span><span class="br0">&#41;</span><span
class="br0">&#41;</span><span class="sy0">-&gt;</span><span
class="me1">getAll</span><span class="br0">&#40;</span><span
class="br0">&#41;</span><span class="sy0">;</span>
    <span
class="re0">$this</span><span class="sy0">-&gt;</span>_view<span
class="br0">&#91;</span><span class="st_h">'tasks'</span><span
class="br0">&#93;</span> <span class="sy0">=</span> <span
class="re0">$tasks</span><span class="sy0">;</span>
<span
class="br0">&#125;</span></pre>

<p>以及对应的视图 app/view/tasks/index.php：</p>

<pre class="php code"><span class="kw2">&lt;?php</span> <span
class="re0">$this</span><span class="sy0">-&gt;</span>_extends<span
class="br0">&#40;</span><span class="st_h">'_layouts/default_layout'</span><span
class="br0">&#41;</span><span class="sy0">;</span> <span
class="kw2">?&gt;</span>
&nbsp;
<span class="kw2">&lt;?php</span> <span
class="re0">$this</span><span class="sy0">-&gt;</span>_block<span
class="br0">&#40;</span><span class="st_h">'contents'</span><span
class="br0">&#41;</span><span class="sy0">;</span> <span
class="kw2">?&gt;</span>
&nbsp;
&lt;div class=&quot;tasks&quot;&gt;
&nbsp;
  &lt;h1&gt;我的任务&lt;/h1&gt;
&nbsp;
  <span
class="kw2">&lt;?php</span> <span class="kw1">foreach</span> <span
class="br0">&#40;</span><span class="re0">$tasks</span> <span
class="kw1">as</span> <span class="re0">$task</span><span
class="br0">&#41;</span><span class="sy0">:</span> <span
class="kw2">?&gt;</span>
&nbsp;
  &lt;h2&gt;&lt;a href=&quot;<span
class="kw2">&lt;?php</span> <span class="kw3">echo</span> url<span
class="br0">&#40;</span><span class="st_h">'tasks/edit'</span><span
class="sy0">,</span> <span class="kw3">array</span><span
class="br0">&#40;</span><span class="st_h">'task_id'</span> <span
class="sy0">=&gt;</span> <span class="re0">$task</span><span
class="sy0">-&gt;</span><span class="me1">id</span><span
class="br0">&#40;</span><span class="br0">&#41;</span><span
class="br0">&#41;</span><span class="br0">&#41;</span><span
class="sy0">;</span> <span class="kw2">?&gt;</span>&quot;&gt;<span
class="kw2">&lt;?php</span> <span class="kw3">echo</span> h<span
class="br0">&#40;</span><span class="re0">$task</span><span
class="sy0">-&gt;</span><span class="me1">subject</span><span
class="br0">&#41;</span><span class="sy0">;</span> <span
class="kw2">?&gt;</span>&lt;/a&gt;&lt;/h2&gt;
&nbsp;
  &lt;p class=&quot;meta&quot;&gt;
    <span
class="kw2">&lt;?php</span> <span class="kw1">if</span> <span
class="br0">&#40;</span><span class="re0">$task</span><span
class="sy0">-&gt;</span><span class="me1">is_completed</span><span
class="br0">&#41;</span><span class="sy0">:</span> <span
class="kw2">?&gt;</span>
    &lt;em&gt;已经在 <span
class="kw2">&lt;?php</span> <span class="kw3">echo</span> <span
class="kw3">date</span><span class="br0">&#40;</span><span
class="st_h">'m-d H:i'</span><span class="sy0">,</span> <span
class="re0">$task</span><span class="sy0">-&gt;</span><span
class="me1">completed_at</span><span class="br0">&#41;</span><span
class="sy0">;</span> <span
class="kw2">?&gt;</span> 完成该任务&lt;/em&gt;
    <span
class="kw2">&lt;?php</span> <span class="kw1">else</span><span
class="sy0">:</span> <span
class="kw2">?&gt;</span>
    &lt;strong&gt;添加日期：<span
class="kw2">&lt;?php</span> <span class="kw3">echo</span> <span
class="kw3">date</span><span class="br0">&#40;</span><span
class="st_h">'m-d H:i'</span><span class="sy0">,</span> <span
class="re0">$task</span><span class="sy0">-&gt;</span><span
class="me1">created</span><span class="br0">&#41;</span><span
class="sy0">;</span> <span class="kw2">?&gt;</span>&lt;/strong&gt;
    <span
class="kw2">&lt;?php</span> <span class="kw1">endif</span><span
class="sy0">;</span> <span class="kw2">?&gt;</span>
  &lt;/p&gt;
&nbsp;
  <span
class="kw2">&lt;?php</span> <span class="kw1">if</span> <span
class="br0">&#40;</span><span class="re0">$task</span><span
class="sy0">-&gt;</span><span class="me1">description</span><span
class="br0">&#41;</span><span class="sy0">:</span> <span
class="kw2">?&gt;</span>
  &lt;p class=&quot;description&quot;&gt;
    <span
class="kw2">&lt;?php</span> <span class="kw3">echo</span> <span
class="kw3">nl2br</span><span class="br0">&#40;</span>h<span
class="br0">&#40;</span><span class="re0">$task</span><span
class="sy0">-&gt;</span><span class="me1">description</span><span
class="br0">&#41;</span><span class="br0">&#41;</span><span
class="sy0">;</span> <span class="kw2">?&gt;</span>
  &lt;/p&gt;
  <span
class="kw2">&lt;?php</span> <span class="kw1">endif</span><span
class="sy0">;</span> <span
class="kw2">?&gt;</span>
&nbsp;
  &lt;hr /&gt;
&nbsp;
  <span
class="kw2">&lt;?php</span> <span class="kw1">endforeach</span><span
class="sy0">;</span> <span
class="kw2">?&gt;</span>
&nbsp;
&lt;/div&gt;
&nbsp;
<span
class="kw2">&lt;?php</span> <span class="re0">$this</span><span
class="sy0">-&gt;</span>_endblock<span class="br0">&#40;</span><span
class="br0">&#41;</span><span class="sy0">;</span> <span
class="kw2">?&gt;</span></pre>

<p>最后在 app/public/css/style.css
添加一些样式定义，以便让列表页面看上去更美观：</p>

<pre class="php code"><span class="sy0">.</span>tasks h2 <span
class="br0">&#123;</span>
        font<span class="sy0">-</span>size<span
class="sy0">:</span> 18px<span class="sy0">;</span>
        font<span
class="sy0">-</span>weight<span class="sy0">:</span> bold<span
class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span
class="sy0">.</span>tasks p <span class="br0">&#123;</span>
        font<span
class="sy0">-</span>size<span class="sy0">:</span> 14px<span
class="sy0">;</span>
        color<span class="sy0">:</span> <span
class="co2">#333;</span>
        font<span class="sy0">-</span>weight<span
class="sy0">:</span> normal<span class="sy0">;</span>
<span
class="br0">&#125;</span>
&nbsp;
<span class="sy0">.</span>tasks p<span
class="sy0">.</span>meta <span class="br0">&#123;</span>
        font<span
class="sy0">-</span>size<span class="sy0">:</span> 12px<span
class="sy0">;</span>
        font<span class="sy0">-</span>weight<span
class="sy0">:</span> normal<span class="sy0">;</span>
        color<span
class="sy0">:</span> <span class="co2">#666;</span>
<span
class="br0">&#125;</span></pre>

<p>现在添加任务后就可以看到任务列表了：</p>

<div class="figure"><img src="images/tasks-add-03.png" alt="" />
	<p>任务列表页面</p>
</div>

<p>$Id: tasks-add.texy 2295 2009-03-10 07:48:18Z dualface $</p>

  </div>

  <div class="guide-footer">

    <table border="0" width="100%">
      <tr>
        <td align="left" width="200">
                    &laquo;
          <a href="node-tasks.html">实现任务管理</a>
          
        </td>

        <td align="center">
          本章：<a href="node-tasks.html">实现任务管理</a>
          <br />
          <a href="index.html">返回索引页</a>
        </td>

        <td align="right" width="200">
                    <a href="node-tasks-edit.html">修改和删除任务</a> 
          &raquo;
                  </td>
      </tr>
    </table>

  </div>

</div>


</div>

</body>
</html>


